Case identityOne canonical Case object carrying four nullable, uniquely-indexed reference fields — SD, CRB, ODPP, Court — so a case can be created from any institution's entry point and reconciled later.
Custody eventsAn append-only FileMovement model (from_location, to_location, courier, dispatched_at, received_at) instead of a status column. Unreceived dispatches after N days are the loss signal.
Perusal decisionsA PerusalMinute model with choices SANCTIONED / DFI / CLOSED, the attorney, the directive text, and the register it was written to. Never overwrite — new minute per decision.
ComplaintsTwo concrete models over a shared abstract base: ConductComplaint (restricted queryset, audit log on every read) and ProcessComplaint (FK to Case, computed latency property, alert threshold 14 days).
JurisdictionRegion → RSA station → RSP station hierarchy seeded from the 18-office table above; complaint routing derives the responsible Regional Officer from the station on the case.